package com.edu.d6_tcp3;
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

/**
 * TCP通信，服务端，一发一收
 */
public class Server {
    /**
     * 将连接的socket放进一个集合当中，用来记录当前连接服务端的客户端集合
     * 原理：服务端ServerSocket对象同意socket连接后，就将此时的socket放到集合当中
     * 当在线程当中，假如有人下线了，就把socket移除集合。
     */
    public static List<Socket> onLineSockets=new ArrayList<>();
    public static void main(String[] args) throws Exception {
        System.out.println("服务端启动成功！~！！！！！");
        /**
         *1、创建ServerSocket的对象，同时为服务端注册端口。
         */
        ServerSocket serverSocket = new ServerSocket(8888);
        /**
         * 2、使用serverSocket对象，调用一个accept方法，等待客户的连接请求,也就是说，客户端的socket与服务端的这个socket打通了一个通道
         */
        while (true) {
            //也就是说，这里可以一直接收客户端的socket,然后把socket分别都赋给一个新线程
            Socket socket = serverSocket.accept();
            onLineSockets.add(socket);
            System.out.println("有人上线了："+socket.getRemoteSocketAddress());
            //将通信管道，交给线程去管理。
            new ServerReaderThread(socket).start();
        }
    }

}
